package com.talkweb.sendmsg.config;

import org.apache.activemq.command.ActiveMQQueue;
import org.apache.activemq.command.ActiveMQTopic;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jms.annotation.EnableJms;
import org.springframework.jms.config.DefaultJmsListenerContainerFactory;
import org.springframework.jms.config.JmsListenerContainerFactory;

import javax.jms.ConnectionFactory;
import javax.jms.Queue;
import javax.jms.Topic;

@Configuration
@EnableJms
public class MsgListener {

	/**
	 * 点对点
	 * 新建一个的Queue对象(默认队列)，交给sringboot管理，这个queue的名称叫"zh-queue".
	 * @return
	 */
	@Bean
	public Queue queue() {
		return new ActiveMQQueue("zh-queue");
	}

	/**
	 * 发布/订阅
	 * 新建一个的topic对象(默认订阅)，交给sringboot管理，这个topic的名称叫"zh-topic".
	 * @return
	 */
	@Bean
	public Topic topic() {
		return new ActiveMQTopic("zh-topic");
	}

	/**
	 * 定义独立的topic定义独立的JmsListenerContainer, 使点对点和发布模式同时生效, 需要添加连接池依赖
	 * <dependency>
	 *     <groupId>org.apache.activemq</groupId>
	 *     <artifactId>activemq-pool</artifactId>
	 * </dependency>
	 * @param activeMQConnectionFactory
	 * @return
	 */
	@Bean
	// @SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
	public JmsListenerContainerFactory jmsListenerContainerTopic(ConnectionFactory activeMQConnectionFactory) {
		DefaultJmsListenerContainerFactory bean = new DefaultJmsListenerContainerFactory();
		bean.setPubSubDomain(true);
		bean.setConnectionFactory(activeMQConnectionFactory);
		return bean;

	}
}
